package com.roncoo.education.common.core.tools;

import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Base64;
import java.util.UUID;

public class Base64ImageUtil {

    /**
     * 将Base64编码的字符串转换为图片文件
     *
     * @param base64Data Base64编码的字符串
     * @param imagePath  图片文件的保存路径
     */
    public static void base64ToImage(String base64Data, String imagePath) {
        // 去掉Base64字符串的meta信息，只保留编码部分
        //String pureBase64Data = base64Data.split(",")[1];

        // 解码Base64字符串为字节数组
        byte[] imageData = Base64.getDecoder().decode(base64Data);

        // 将字节数组写入文件
        try (OutputStream stream = new FileOutputStream(imagePath)) {
            stream.write(imageData);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }

    /**
     * 将图片文件转换为Base64编码的字符串
     *
     * @param imagePath 图片文件的路径
     * @return Base64编码的字符串
     */
    public static String imageToBase64(String imagePath) {
        try {
            // 读取图片文件为字节数组
            byte[] imageData = Files.readAllBytes(Paths.get(imagePath));

            // 将字节数组编码为Base64字符串
            return Base64.getEncoder().encodeToString(imageData);
        } catch (IOException e) {
            e.printStackTrace();
            return "";
        }
    }

    /**
     * 示例方法：演示如何使用上述方法进行Base64与图片之间的转换
     *
     * @param args 命令行参数（未使用）
     */
    public static void main(String[] args) {
        // 示例图片路径和输出路径
        String imagePath = "D:\\tmp\\1.jpg"; // 替换为实际的图片文件路径
        String outputImagePath = "D:\\tmp\\output.jpg"; // 替换为期望的输出图片文件路径

        // 将图片转换为Base64编码字符串
        String base64Data = imageToBase64(imagePath);
        System.out.println("Base64编码字符串（部分展示）：" + base64Data.substring(0, 100) + "...");

        // 将Base64编码字符串转换为图片并保存
        base64ToImage(base64Data, outputImagePath);
        System.out.println("图片已成功转换为Base64编码并转换回图片，保存路径：" + outputImagePath);
    }
}